#!/bin/bash

# 脚本名称：list_net_drivers.sh
# 功能：列出所有网络接口的信息，包括名称、MAC地址、驱动名称和操作状态
# 作者：ChatGPT
# 日期：2025-03-22

# 打印表头和分割线
print_header() {
    # 打印表头
    printf "%-12s %-20s %-15s %-10s\n" "Interface" "MAC Address" "Driver" "State"
    # 打印分割线，长度与表头对齐
    printf "%.0s-" {1..60}
    echo
}

# 打印网络接口信息
print_interface_info() {
    local dev="$1"  # 网络接口名称

    # 获取驱动名称，若不存在则显示为 "Unknown"
    driver=$(readlink "/sys/class/net/$dev/device/driver/module" 2>/dev/null)
    if [ "$driver" ]; then
        driver=$(basename "$driver")
    else
        driver="Unknown"
    fi

    # 获取MAC地址，若不存在则显示为 "N/A"
    addr=$(cat "/sys/class/net/$dev/address" 2>/dev/null)
    if [ -z "$addr" ]; then
        addr="N/A"
    fi

    # 获取操作状态（up/down/unknown），若获取失败则显示为 "unknown"
    operstate=$(cat "/sys/class/net/$dev/operstate" 2>/dev/null)
    if [ -z "$operstate" ]; then
        operstate="unknown"
    fi

    # 格式化输出接口信息
    printf "%-12s %-20s %-15s (%s)\n" "$dev" "$addr" "$driver" "$operstate"
}

# 打印脚本功能说明
print_usage() {
    echo "本脚本用于列出系统中的所有网络接口信息，包括名称、MAC地址、驱动名称和操作状态。"
    echo "直接运行脚本，无需任何参数。"
    echo "示例："
    echo "  ./list_net_drivers.sh"
    echo
}

# 脚本主入口
main() {
    print_usage       # 打印使用说明
    print_header      # 打印表头

    # 遍历系统中的所有网络接口
    for f in /sys/class/net/*; do
        dev=$(basename "$f")  # 提取网络接口名称
        print_interface_info "$dev"  # 打印接口信息
    done
}

# 执行主函数
main
